// PROGRAMA : IDCTAB01
// BIBLIOTECA : SISP
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : SEJUSP - SEC. DA JUSTICA E SEGURANCA PUBLICA
// INSTITUTO DE IDENTIFICACAO, DETRAN E SEFAZ
// PROGRAMADOR : * DATA: 22/02/2003
// OBJETIVO : CONSULTA TABELA DE MUNICIPIO A PARTIR DO IDCPA001
// ATUALIZACOES DATA
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.util.Arrays;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idctabx1A;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idctabx1B;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idctabx1C;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Tabtc001;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Idctabx1 OBJETIVO : CONSULTA TABELA DE MUNICIPIO A PARTIR DO IDCPA001 *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/idctabx1")
public class Idctabx1 {
	// Views utilizadas
	SicTabelas vwDvetab = new SicTabelas();
	SicTabelas vwTabele = new SicTabelas();
	// Telas/relatorios utilizados
	Idctabx1A idctabx1A;
	Idctabx1B idctabx1B;
	Idctabx1C idctabx1C;
	Tabtc001 tabtc001;
	// Includes utilizados
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Idctabx1 idctabx1Anterior;
	String faseproc = "0";

	// Par�metros
	private int codtab = 0;
	private String[] ele = new String[13];
	private int m = 0;
	private int j = 0;
	private int i = 0;
	private String tabdec = "";
	private long cod4 = 0;
	private String tabcha = "";
	private String jDescricao = "";
	private String jRia = "";

	private Idctabx1A preMapas() {
		int i1;
		idctabx1A = new Idctabx1A(true, sessao);
		idctabx1B = new Idctabx1B(true, sessao);
		idctabx1C = new Idctabx1C(true, sessao);
		tabtc001 = new Tabtc001(true, sessao);
		Arrays.fill(ele, "");
		for (i1 = 1; i1 <= 14; i1++) {
			tabtc001.setTab0(i1, 0);
			tabtc001.setCod0(i1, 0);
			tabtc001.setCha0(i1, "");
			tabtc001.setDes0(i1, "");
			tabtc001.setGru0(i1, "");
			tabtc001.setObs0(i1, "");
			tabtc001.setObs0(i1, "");
			tabtc001.setDat0(i1, 0);
			tabtc001.setMat0(i1, 0);
		}
		tabtc001.setDataCorrente(UtilBean.obtemDataDia());
		idctabx1A.setJoperacao("CTD");
		// R0. REPEAT
		idctabx1A.setCodtab(001);
		tabtc001.setConf("S");
		return idctabx1A;
	}

	public Idctabx1(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Idctabx1A idctabx1A, Idctabx1B idctabx1B, Idctabx1C idctabx1C, Tabtc001 tabtc001) {
		try {
			main(idctabx1A, idctabx1B, idctabx1C, tabtc001);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Idctabx1A pidctabx1A, Idctabx1B pidctabx1B, Idctabx1C pidctabx1C, Tabtc001 ptabtc001) throws NumberFormatException, Exception {
		if (pidctabx1A == null && pidctabx1B == null && pidctabx1C == null && ptabtc001 == null) {
			primeiraVez = true;
			// tabtc001 = new Tabtc001 (primeiraVez);
			idctabx1A = preMapas();
			idctabx1A.setNavegar("../idctabx1/executar");
			result.include("idctabx1A", idctabx1A);
			sessao.setAtributo("IDCTABX1", this);
			idctabx1A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(pidctabx1A, pidctabx1B, pidctabx1C, ptabtc001);
		}

		if (pidctabx1A != null) {
			idctabx1A.receberTela(false, result);
			if (!UtilBean.funcao.equals(UtilBean.ctt_processa)) {
				idctabx1A.enviarMensagem(null, "");
				result.include("idctabx1A", idctabx1A);
				sessao.setAtributo("IDCTABX1", this);
				tabtc001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}
		}
		switch (idctabx1A.getJoperacao()) {
		case "CTC": {
			monta();
			vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 0, 3, "N", tabtc001.getCodtab());
			if (tabtc001.getCodtab() == 001) {

				if (pidctabx1B == null) {
					result.include("idctabx1B", idctabx1B);
					sessao.setAtributo("IDCTABX1", this);
					idctabx1B.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
					return;
				} else {
					if (pidctabx1C == null)
						idctabx1B.receberTela(false, result);
				}
				// IDCTABX1
				tabcha = UtilBean.moveSubstring(tabcha, 0, 3, "N", 001);
				idctabx1B.setTabcha(tabcha);

				// Par�grafo: rep3()

				codtab = 0;
				// Par�grafo: rd3()
				while (vwDvetab.leituraTabchaMaiorig(tabcha, codtab)) {
					moveDvetab(ptabtc001);
					if (vwDvetab.fimDados()) {
						if (i > 0) {
							telao(ptabtc001);
						}
					}
					if (vwDvetab.quebraDiatabchalfa()) {
						if (!idctabx1B.getUf().equals("  ") && i > 0) {
							telao(ptabtc001);
							break;
						}
					}
					if (tabtc001.getConf().equals("N")) {
						break;
					}
					if (tabtc001.getCodtab() > 0) {
						break;
					}
					if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
						idctabx1A.setJoperacao("AIC");
						UtilBean.salvaAcao("br.com.vti.sisp.mb.programa.Idcpa001"); // STACK
					}
				}

			} else {
				if (tabtc001.getCodtab() == 18) {

					if (pidctabx1C == null) {
						result.include("idctabx1C", idctabx1C);
						sessao.setAtributo("IDCTABX1", this);
						idctabx1C.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
						return;
					} else {
						idctabx1C.receberTela(false, result);
					}
					// IDCTABX1_A
					// IDCTABX1
					if (!(idctabx1C.getJopcao().equals("A") || idctabx1C.getJopcao().equals("E") || idctabx1C.getJopcao().trim().equals(""))) {
						idctabx1A.enviarMensagem(null, "");
						return;
					}
					tabcha = UtilBean.moveSubstring(tabcha, 0, 3, "N", 18);
					idctabx1B.setTabcha(tabcha);
					// Par�grafo: rep4()

					codtab = 0;
					// Par�grafo: rd4()
					while (vwDvetab.leituraTabeleMaiorig(18, (long) codtab)) {
						if (!idctabx1C.getJopcao().trim().equals("")) {

							jDescricao = vwDvetab.getDescricaoElem();
							if (idctabx1C.getJopcao().equals("E")) {
								if (!(idctabx1C.getJopcao() == jRia)) {
									continue;
								}
							} else {
								if (jRia.equals("E")) {
									continue;
								}
							}
						}
						if (vwTabele.getCodigoTabela() != 18) {
							break;
						}
						moveDvetab(ptabtc001);
						if (vwDvetab.fimDados()) {
							if (i > 0) {
								telao(ptabtc001);
							}
						}
						if (tabtc001.getConf().equals("N")) {
							break;
						}
						if (tabtc001.getCodtab() > 0) {
							break;
						}
						if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
							UtilBean.salvaAcao("br.com.vti.sisp.mb.programa.Idcpa001"); // STACK
						}
					}

				} else {
					// Par�grafo: rep1()

					j = 12;
					for (i = 12; i >= 1; i += -1) {
						if (UtilBean.validarMascara(ele[i], "N")) {

							cod4 = Long.parseLong(UtilBean.moveSubstring(cod4, j, 1, "A", ele[i]));
							j = j;
						}
					}
					vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 0, 3, "N", tabtc001.getCodtab());
					vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 3, 12, "N", cod4);
					codtab = 0;
					// Par�grafo: rd1()
					while (vwDvetab.leituraTabeleMaiorig(tabtc001.getCodtab(), cod4)) {
						moveDvetab(ptabtc001);
						if (vwDvetab.fimDados()) {
							if (i > 0) {
								telao(ptabtc001);
							}
						}
						if (tabtc001.getConf().equals("N")) {
							break;
						}
						if (tabtc001.getCodtab() > 0) {
							break;
						}
						if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
							idctabx1A.setJoperacao("AIC");
							UtilBean.salvaAcao("br.com.vti.sisp.mb.programa.Idcpa001"); // STACK
						}
					}

				}
			}
			break;
		}
		case "CTD": {
			if (tabtc001.getCodtab() == 18) {

				if (pidctabx1C == null) {
					result.include("idctabx1C", idctabx1C);
					sessao.setAtributo("IDCTABX1", this);
					idctabx1C.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
					return;
				} else {
					idctabx1C.receberTela(false, result);
				}
				// IDCTABX1
				if (!(idctabx1C.getJopcao().equals("A") || idctabx1C.getJopcao().equals("E") || idctabx1C.getJopcao().trim().equals(""))) {
					idctabx1A.enviarMensagem(null, "");
					return;
				}
				// Par�grafo: rep2()

				tabdec = UtilBean.moveSubstring(tabdec, 0, 3, "N", tabtc001.getCodtab());
				tabdec = UtilBean.moveSubstring(tabdec, 3, 60, "A", tabtc001.getDescri());
				codtab = 0;
				// Par�grafo: rd2()
				while (vwDvetab.leituraTabdecMaiorig(tabtc001.getCodtab(), tabtc001.getDescri())) {
					if (!idctabx1C.getJopcao().trim().equals("")) {

						jDescricao = vwDvetab.getDescricaoElem();
						if (idctabx1C.getJopcao().equals("E")) {
							if (!(idctabx1C.getJopcao() == jRia)) {
								continue;
							}
						} else {
							if (jRia.equals("E")) {
								continue;
							}
						}
					}
					if (vwTabele.getCodigoTabela() != 18) {
						break;
					}
					moveDvetab(ptabtc001);
					if (vwDvetab.fimDados()) {
						if (i > 0) {
							telao(ptabtc001);
						}
					}
					if (tabtc001.getConf().equals("N")) {
						break;
					}
					if (tabtc001.getCodtab() > 0) {
						break;
					}
					if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
						idctabx1A.setJoperacao("AIC");
						UtilBean.salvaAcao("br.com.vti.sisp.mb.programa.Idcpa001"); // STACK
					}
				}

			} else {
				// Par�grafo: rep5()

				tabdec = UtilBean.moveSubstring(tabdec, 0, 3, "N", tabtc001.getCodtab());
				tabdec = UtilBean.moveSubstring(tabdec, 3, 60, "A", tabtc001.getDescri());
				codtab = 0;
				// Par�grafo: rd5()
				while (vwDvetab.leituraTabdecMaiorig(tabtc001.getCodtab(), tabtc001.getDescri())) {
					moveDvetab(ptabtc001);
					if (vwDvetab.fimDados()) {
						if (i > 0) {
							telao(ptabtc001);
						}
					}
					if (tabtc001.getConf().equals("N")) {
						break;
					}
					if (tabtc001.getCodtab() > 0) {
						break;
					}
					if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
						idctabx1A.setJoperacao("AIC");
						UtilBean.salvaAcao("br.com.vti.sisp.mb.programa.Idcpa001"); // STACK
					}
				}

			}
			break;
		}
		default: {
			idctabx1A.setJoperacao("AIC");
			UtilBean.salvaAcao("br.com.vti.sisp.mb.programa.Idcpa001"); // STACK
		}
		}
		sessao.setAtributo("IDCTABX1", this);
		result.include("tabtc001", tabtc001);
		tabtc001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
	}

	private void moveDvetab(Tabtc001 ptabtc001) {
		i += 1;
		if (vwDvetab.getCodigoTabela() != 18) {

			tabtc001.setCha0(i, vwDvetab.getChaveAlfaAcesso());
		}

		tabtc001.setObs0(i, vwDvetab.getObservacao());
		tabtc001.setGru0(i, vwDvetab.getGrupoElem());
		tabtc001.setDat0(i, vwDvetab.getDataAtualizacao());
		tabtc001.setMat0(i, vwDvetab.getMatriculaFunc());
		tabtc001.setTab0(i, vwDvetab.getCodigoTabela());
		tabtc001.setCod0(i, vwDvetab.getCodigoElem());
		tabtc001.setDes0(i, vwDvetab.getDescricaoElem());
		if (i == 14) {
			telao(ptabtc001);
		}
	}

	private void telao(Tabtc001 ptabtc001) {

		tabtc001.receberTela(false, result);
		if (ptabtc001 == null) {
			result.include("tabtc001", tabtc001);
			sessao.setAtributo("IDCTABX1", this);
			tabtc001.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			tabtc001.receberTela(false, result);
		}
		if (!(idctabx1A.getJoperacao().equals("CTC") || idctabx1A.getJoperacao().equals("CTD"))) {
			funcoes.sissm001(result, sessao);
		}
		// PERFORM ROT01-WYZ-K7
		for (int i1 = 1; i1 <= 14; i1++) {
			tabtc001.setTab0(i1, 0);
			tabtc001.setCod0(i1, 0);
			tabtc001.setCha0(i1, "");
			tabtc001.setDes0(i1, "");
		}
		i = 0;
	} // END-REPEAT

	private void monta() throws NumberFormatException, Exception {
		m = 12;
		j = 12;
		do {
			if (UtilBean.validarMascara(ele[m], "N")) {

				cod4 = Long.parseLong(UtilBean.moveSubstring(cod4, j, 1, "A", ele[m]));
				j = j - 1;
			}

			m = m - 1;
		} while (!(m == 0));
		vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 3, 12, "N", cod4);
	} // SISCERRO}}} //UtilBean.mensagemTexto("!  ERROR NUMERO:" *ERROR-NR
		// "    LINHA:" *ERROR-LINE " PROGRAMA:" idctabx1A.getNomeClasse()
		// tabtc001.getNomeClasse() "!");

	private void restaurarEstados(Idctabx1A pidctabx1A, Idctabx1B pidctabx1B, Idctabx1C pidctabx1C, Tabtc001 ptabtc001) {
		this.idctabx1Anterior = (Idctabx1) sessao.getAtributo("IDCTABX1");
		if (pidctabx1A != null) {
			idctabx1A = pidctabx1A;
		} else {
			idctabx1A = this.idctabx1Anterior.idctabx1A;
		}
		idctabx1A.setSessao(sessao);
		if (pidctabx1B != null) {
			idctabx1B = pidctabx1B;
		} else {
			idctabx1B = this.idctabx1Anterior.idctabx1B;
		}
		idctabx1B.setSessao(sessao);
		if (pidctabx1C != null) {
			idctabx1C = pidctabx1C;
		} else {
			idctabx1C = this.idctabx1Anterior.idctabx1C;
		}
		idctabx1C.setSessao(sessao);
		if (ptabtc001 != null) {
			tabtc001 = ptabtc001;
		} else {
			tabtc001 = this.idctabx1Anterior.tabtc001;
		}
		tabtc001.setSessao(sessao);
		this.faseproc = this.idctabx1Anterior.faseproc;
	}
}
